package com.lyp.lease.web.admin.test;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

public class CodeGenerator {
    public static void main(String[] args) {
        // 数据库连接信息
        String url = "jdbc:mysql://192.168.40.100:3306/lease?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "123456";

        // 项目路径（生成代码的根目录）
        String projectPath = System.getProperty("user.dir"); // 项目根目录
        String mainJavaDir = projectPath + "/web-admin/src/main/java"; // 主代码输出到 web-admin 的 src/main/java
        String resourcesDir = projectPath + "/web-admin/src/main/resources"; // 资源文件（Mapper XML）输出目录

        FastAutoGenerator.create(url, username, password)
                // 1. 全局配置
                .globalConfig(builder -> {
                    builder.author("lyp") // 作者
                            .enableSwagger() // 开启 Swagger 注解
                            .fileOverride() // 覆盖已有文件
                            .outputDir(mainJavaDir); // 代码输出目录
                })

                // 2. 包配置
                .packageConfig(builder -> {
                    builder.parent("com.lyp.lease.web.admin") // 父包名
                            .entity("entity") // 实  体类包名
                            .mapper("mapper") // Mapper 接口包名
                            .service("service") // Service 接口包名
                            .serviceImpl("service.impl") // Service 实现类包名
                            .controller("controller") // Controller 包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mapper")); // Mapper XML 路径
                })

                // 3. 策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("user", "lease") // 需要生成的表名（支持通配符 %）
                            .addTablePrefix("t_", "sys_") // 过滤表前缀（如 t_user → User）

                            // 实体类策略
                            .entityBuilder()
                            .enableLombok() // 开启 Lombok
                            .enableTableFieldAnnotation() // 开启字段注解（如 @TableField）

                            // Controller 策略
                            .controllerBuilder()
                            .enableRestStyle() // 生成 @RestController
                            .enableHyphenStyle() // 路径转连字符（如 /userInfo → /user-info）

                            // Service 策略
                            .serviceBuilder()
                            .formatServiceFileName("%sService") // Service 接口命名（如 IUserService）
                            .formatServiceImplFileName("%sServiceImpl") // Service 实现类命名

                            // Mapper 策略
                            .mapperBuilder()
                            .enableMapperAnnotation() // 生成 @Mapper 注解
                            .formatMapperFileName("%sMapper") // Mapper 接口命名
                            .formatXmlFileName("%sMapper"); // Mapper XML 命名
                })

                // 4. 模板引擎（可选，默认 Velocity）
                .templateEngine(new VelocityTemplateEngine())

                // 5. 执行生成
                .execute();

        System.out.println("代码生成完成！");
    }
}
